'use strict';
const Service = require('egg').Service;
const { ErrCode } = require('../../utils/resModel');
const { _pwd } = require('../../utils/cryp');
// const { _setRedis } = require("../utils/redisModel");
class loginService extends Service {
  // 用户登录
  async login(data) {
    try {
      const { User } = this.app.model.Tables.Shop;
      const { ctx, app } = this;
      const loginRes = await User.findOne({
        where: {
          phone: data.phone,
        },
        raw: true,
      });
      // 检测账号是否存在
      if (loginRes == null) {
        return ctx.response.error('账号不存在');
      }

      // 检测密码
      // console.log(data.password, res.password);
      const Check = await ctx.compare(String(data.password), loginRes.password);
      if (!Check) {
        return ctx.response.error('用户密码错误');
      }
      // token过期时间 (默认一天)
      const expiresTime = new Date().getTime() + 24 * 60 * 60 * 1000;
      // 结合jwt生成携带信息的token
      const token = app.jwt.sign(
        {
          user_id: loginRes.id,
          // 返回毫秒
          token_out_of_date: expiresTime,
          // ? 区分c端项目
          project_type: 'shop',
        },
        app.config.jwt.secret,
        {
          // 返回过期时间单位为秒
          expiresIn: '1 days',
        }
      );
      // exp - JWT的过期时间
      // iat - JWT的签发时间

      // 添加token到商家表，默认过期时间一天
      await User.update(
        {
          token,
          token_out_of_date: expiresTime,
          last_ip: ctx.request.ip,
        },
        {
          where: {
            id: loginRes.id,
          },
        }
      );
      // 去除密码
      delete loginRes.password;
      loginRes.token = token;
      return this.ctx.response.success(loginRes);
    } catch (error) {
      return this.ctx.response.error(error.message);
    }
  }
  // // 商家登录
  // async loginAdmin(data) {
  //   try {
  //     const { Admin } = this.app.model.Tables.Com;
  //     const { ctx } = this;
  //     const loginRes = await Admin.findOne({
  //       where: {
  //         phone: data.phone,
  //         password: data.password,
  //       },
  //       //商家登录成功后，密码这种敏感信息不应该暴露出来
  //       // attributes: { exclude: ['password'] },
  //     });
  //     if (loginRes) {
  //       const time = Date.now();
  //       const { id } = loginRes.dataValues;
  //       const { password: token } = new _pwd(id + time);
  //       // 添加token到商家表，默认过期时间一天
  //       await loginRes.update({
  //         token,
  //         token_out_of_date: new Date().getTime() + 24 * 60 * 60 * 1000,
  //         last_ip: ctx.request.ip,
  //       });
  //       return ctx.response.success(loginRes, '登录成功');
  //     }
  //     return ctx.response.error('账号或密码错误');
  //   } catch (error) {
  //     return this.ctx.response.error(error.message);
  //   }
  // }
}
module.exports = loginService;
